{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# SqueezeNet on ImageNet\n",
    "\n",
    "This is SqueezeNet on Imagenet. SGD algorithm.\n",
    "\n",
    "\n",
    "#### Direct SqeezeNet\n",
    "\n",
    "    Total params: 1,248,424\n",
    "    Trainable params: 1,248,424\n",
    "    Non-trainable params: 0\n",
    "\n",
    "\n",
    "####  Sqeeze with 50K intrinsic dim\n",
    "\n",
    "    Total params: 7,589,881\n",
    "    Trainable params: 50,000\n",
    "    Non-trainable params: 7,539,881\n",
    "    \n",
    "####  Sqeeze with 100K intrinsic dim\n",
    "\n",
    "    Total params: 7,639,881\n",
    "    Trainable params: 100,000\n",
    "    Non-trainable params: 7,539,881\n",
    "\n",
    "####  Sqeeze with 200K intrinsic dim\n",
    "\n",
    "    Total params: 7,739,881\n",
    "    Trainable params: 200,000\n",
    "    Non-trainable params: 7,539,881\n",
    "\n",
    "####  Sqeeze with 500K intrinsic dim\n",
    "\n",
    "    Total params: 8,039,881\n",
    "    Trainable params: 500,000\n",
    "    Non-trainable params: 7,539,881\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os, sys\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.pyplot import *\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Find the right directory  with\n",
    "\n",
    "    `ll | grep direct`\n",
    "    `ll | grep vsize50k`\n",
    "    `ll | grep vsize100m`\n",
    "    ...\n",
    "    \n",
    "Go to the most recent one, grep validation accuracies with e.g.\n",
    "\n",
    "     `grep val: 171023_044314_a9c117e_lrb_squz_dist4_direct_cont_3x/diary`\n",
    "    ...\n",
    "    \n",
    "    \n",
    "Copy the best accuracy numbers (4 of them due to 4-GPU distributed training)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Direct\n",
    "\n",
    "(ml)rosanne@opusgpu168-wbu2 [/mnt/share/public/results/rosanne/171019_sqznet] $ grep val: 171023_044314_a9c117e_lrb_squz_dist4_direct_cont_3x/diary\n",
    "\n",
    "17.10.23.04.44.13.557   505404 (worker 3) val:   l:  2.0153, l_xe:  2.0153, acc:  0.5481 (0.126s/i)\n",
    "\n",
    "17.10.23.04.44.14.129   505404 (worker 1) val:   l:  2.0145, l_xe:  2.0145, acc:  0.5510 (0.129s/i)\n",
    "\n",
    "17.10.23.04.44.14.190   505404 (worker 0) val:   l:  2.0251, l_xe:  2.0251, acc:  0.5469 (0.129s/i)\n",
    "\n",
    "17.10.23.04.44.14.500   505404 (worker 2) val:   l:  2.0019, l_xe:  2.0019, acc:  0.5504 (0.129s/i)\n",
    "\n",
    "\n",
    "#### intrinsic 50k\n",
    "\n",
    "(ml)rosanne@opusgpu168-wbu2 [/mnt/share/public/results/rosanne/171019_sqznet] $ grep val: 171023_151800_a9c117e_lrb_squz_dist4_fastfood_vsize50k_cont2_cont3_cont_cont/diary\n",
    "\n",
    "17.10.23.15.18.46.406   275220 (worker 3) val:   l:  4.6874, l_xe:  4.6874, acc:  0.1371 (0.0738s/i)\n",
    "\n",
    "17.10.23.15.18.46.884   275220 (worker 1) val:   l:  4.6705, l_xe:  4.6705, acc:  0.1377 (0.0729s/i)\n",
    "\n",
    "17.10.23.15.18.53.147   275220 (worker 0) val:   l:  4.6823, l_xe:  4.6823, acc:  0.1373 (0.107s/i)\n",
    "\n",
    "17.10.23.15.18.53.510   275220 (worker 2) val:   l:  4.6737, l_xe:  4.6737, acc:  0.1387 (0.107s/i)\n",
    "\n",
    "#### intrinsic 100k\n",
    "\n",
    "(ml)rosanne@opusgpu168-wbu2 [/mnt/share/public/results/rosanne/171019_sqznet] $ grep val: 171023_152032_a9c117e_lrb_squz_dist4_fastfood_vsize100k_cont_cont_cont2_cont_2x/diary\n",
    "\n",
    "17.10.23.15.21.41.945   565452 (worker 0) val:   l:  3.9296, l_xe:  3.9296, acc:  0.2381 (0.148s/i)\n",
    "\n",
    "17.10.23.15.21.42.234   565452 (worker 2) val:   l:  3.9113, l_xe:  3.9113, acc:  0.2385 (0.15s/i)\n",
    "\n",
    "17.10.23.15.21.42.444   565452 (worker 1) val:   l:  3.9138, l_xe:  3.9138, acc:  0.2397 (0.152s/i)\n",
    "\n",
    "17.10.23.15.21.42.522   565452 (worker 3) val:   l:  3.9388, l_xe:  3.9388, acc:  0.2377 (0.154s/i)\n",
    "\n",
    "#### intrinsic 200k\n",
    "\n",
    "(ml)rosanne@opusgpu168-wbu2 [/mnt/share/public/results/rosanne/171019_sqznet] $ grep val: 171023_152741_a9c117e_lrb_squz_dist4_fastfood_vsize200k_cont_6x/diary\n",
    "\n",
    "17.10.23.19.00.57.030   680544 (worker 0) val:   l:  3.6063, l_xe:  3.6063, acc:  0.2820 (0.139s/i)\n",
    "\n",
    "17.10.23.19.00.57.035   680544 (worker 2) val:   l:  3.5659, l_xe:  3.5659, acc:  0.2871 (0.139s/i)\n",
    "\n",
    "17.10.23.19.00.57.085   680544 (worker 1) val:   l:  3.5694, l_xe:  3.5694, acc:  0.2843 (0.139s/i)\n",
    "\n",
    "17.10.23.19.00.57.092   680544 (worker 3) val:   l:  3.6047, l_xe:  3.6047, acc:  0.2870 (0.139s/i)\n",
    "\n",
    "\n",
    "#### intrinsic 500k\n",
    "\n",
    "(ml)rosanne@opusgpu168-wbu2 [/mnt/share/public/results/rosanne/171019_sqznet] $ grep val: 171023_152544_a9c117e_lrb_squz_dist4_fastfood_vsize500k_cont2_cont3/diary\n",
    "\n",
    "17.10.23.18.57.14.485   360288 (worker 0) val:   l:  3.4111, l_xe:  3.4111, acc:  0.3177 (0.121s/i)\n",
    "\n",
    "17.10.23.18.57.14.530   360288 (worker 2) val:   l:  3.3885, l_xe:  3.3885, acc:  0.3151 (0.122s/i)\n",
    "\n",
    "17.10.23.18.57.14.544   360288 (worker 1) val:   l:  3.3623, l_xe:  3.3623, acc:  0.3232 (0.122s/i)\n",
    "\n",
    "17.10.23.18.57.14.566   360288 (worker 3) val:   l:  3.3980, l_xe:  3.3980, acc:  0.3153 (0.122s/i)\n",
    "\n",
    "\n",
    "#### intrinsic 500k with large batch\n",
    "\n",
    "(ml)rosanne@opusgpu168-wbu2 [/mnt/share/public/results/rosanne/171019_sqznet] $ grep val: 171023_005007_a9c117e_lrb_squz_dist4_fastfood_vsize500k_mb900_cont_cont2/diary\n",
    "\n",
    "17.10.23.13.07.12.374   125224 (worker 1) val:   l:  3.2953, l_xe:  3.2953, acc:  0.3360 (2.39s/i)\n",
    "\n",
    "17.10.23.13.07.12.375   125224 (worker 3) val:   l:  3.3209, l_xe:  3.3209, acc:  0.3354 (2.39s/i)\n",
    "\n",
    "17.10.23.13.09.21.004   125224 (worker 2) val:   l:  3.3296, l_xe:  3.3296, acc:  0.3270 (4.73s/i)\n",
    "\n",
    "17.10.23.13.09.21.072   125224 (worker 0) val:   l:  3.2987, l_xe:  3.2987, acc:  0.3270 (4.73s/i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "dim = [0,50000,100000,200000,500000,500001]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "Rs = [\n",
    "    np.mean([0.5481, 0.5510,0.5469, 0.5504]), # direct, or dim 0\n",
    "    np.mean([0.1371, 0.1377,0.1373, 0.1387]), # dim 50k\n",
    "    np.mean([0.2381, 0.2385,0.2397, 0.2377]), # dim 100k\n",
    "    np.mean([0.2820, 0.2871,0.2843, 0.2870]), # dim 200k\n",
    "    np.mean([0.3177, 0.3151,0.3232, 0.3153]), # dim 500k\n",
    "    np.mean([0.3360, 0.3354,0.3270, 0.3270]), # dim 500k with large batch\n",
    "]\n",
    "\n",
    "Rs = np.array(Rs)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.5491  ,  0.1377  ,  0.2385  ,  0.2851  ,  0.317825,  0.33135 ])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Rs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Performance comparison with Baseline\n",
    "\n",
    "\"Baseline method\" indicates optimization in the parameter space.\n",
    "\n",
    "The proposed method first embeds parameters into the intrinisic space (via orthogonal matrix), and optimization is the new space.\n",
    "\n",
    "The dimension of intrinsic space indicates the degree of freedom in the weights of neural nets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "matplotlib.rcParams.update({'font.size': 16})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nv/12V69ePf93/POf/3xGP7OC5O2jslDc7yOwwXnIbwI9MneIgkfgChuxK5CZXQY0B+4rpbhERCqt\n++67j40bN5ZrDG3btuW5554rs/aXLl3K0KFDGThwIH/961/JyspixowZdOnShS+//JL69euzbds2\nBg0axPDhw3n88ccJCwvjq6++4rvvvgNg2rRpHDhwgG3btvHGG28AUK1atSKvu3XrVh588EEmTJhA\nbGwss2bNYtCgQezYsYNatWoBsGLFCm655RaGDBnCc889x969exkzZgzp6em0bds2X3v16tWjbdu2\nrFp16uYOp9u8eTMPPPAAU6ZMoVatWjz//PMMGTKEjz76iMsvvxyA77//nqZNm3L99ddTs2ZNvv76\na5544gn+/e9/+0eMDh06xK9+9Su6dOnCq6++SlRUFN9++y2fffaZ/1r/+c9/6NChA+effz6zZ88m\nLi6OBQsW0L9/f95991369OnjraNyOOcYNGgQI0eOZNy4cSxdupSJEyfSpEkTbrzxRn9cnTp1Anx9\n06hRI9555x1GjhxJZmYmo0aNKtE1g1mgk7nN+O6bO1VLYEsJ2rkFyAD+WhpBiYjIuSs7O5t7772X\nPn36sHjxYn95165dadq0Kb///e+ZOXMmGzZsIDMzkxdeeMF/r12PHj3851944YXExcURERFBx44d\nPV17//79fPzxxzRu3BiANm3acP7557NkyRJ/svHoo4/Svn17f4IIkJiYSOfOnU9rLywsjNDQUE/X\n3rNnD1988QXt2rUDoG/fvjRr1ozHHnuM1atX+79f3u/YuXNnGjduTK9evdi6dSstWrRg8+bNpKam\n8vTTT5OQkOA/99Zbb/X/+ZFHHiEiIoIPP/yQGjVqANCnTx927drFY489VuJkLjs7m4kTJ/oTtx49\nerBmzRr+9re/+cueeuop9u7dy+bNm/0LXXr16sWBAwd47LHHGDlyJCEhlePZCIFO5pYDT5lZU+fc\nfwDMrAnQGXjISwNmVgW4AVjpnPupjOIUEak0ynJErCLYvHkzu3fvZtasWWRm/ne9XExMDL/85S/5\nxz/+AUD79u0JCQlh6NChjBgxgi5dulC7du2zunarVq38iRxAw4YNqVmzJikpKQCcOHGCjRs38sQT\nT+Srd/nll1O/fv3T2tu9e/dpZYVp1qyZP5EDXyI4ZMgQ5s6d6y9LT0/nySefZMGCBezatYsTJ074\n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\nrMb+D7SDr7idBsP8AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f126a531590>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "nn = len(Rs)-1\n",
    "fig, ax = subplots(figsize=(5,4) )\n",
    "  \n",
    "   \n",
    "plt.scatter(dim[1:], Rs[1:], edgecolor=\"b\", facecolor=\"c\",s=150 )\n",
    "ax.plot(dim[1:], Rs[0]*np.ones(nn)*0.9,'k-.', label=\"Testing: 0.9*baseline\")\n",
    "ax.plot(dim[1:], Rs[0]*np.ones(nn),'k-', label=\"Testing: baseline\")\n",
    "ax.set_xlabel('Intrinsic Dim')\n",
    "ax.set_ylabel('Top 1 Accuracy')\n",
    "plt.grid()\n",
    "ax.legend()\n",
    "ax.set_ylim([-0.0,0.8])\n",
    "ax.set_xlim([0,530000])\n",
    "fig.set_size_inches(10, 6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
